import { useUserStore } from '@/store/modules/user';

/**
 * 身份验证守卫组合式函数
 * 用于拦截需要登录才能执行的操作
 * 
 * @returns {Object} 包含 authGuard 方法的对象
 */
export function useAuthGuard() {
  const userStore = useUserStore();

  /**
   * 身份验证守卫方法
   * 如果用户已登录，执行回调函数
   * 如果用户未登录，显示登录弹窗
   * 
   * @param {Function} callback - 用户已登录时要执行的回调函数
   * @param {Object} options - 配置选项
   * @param {String} options.mode - 打开登录弹窗的模式，'login' 或 'register'
   * @param {String} options.message - 可选的提示消息
   * @returns {Promise<any>} 如果用户已登录，返回回调函数的结果；否则返回 undefined
   */
  const authGuard = async (callback, options = {}) => {
    const { mode = 'login', message = null } = options;

    // 检查用户是否已登录
    if (userStore.isLoggedIn()) {
      // 用户已登录，执行回调函数
      return await callback();
    } else {
      // 用户未登录，显示可选的提示消息
      if (message) {
        ElMessage.info(message);
      }
      
      // 打开登录弹窗
      userStore.openAuthModal(mode);
      
      // 返回 undefined 表示操作被拦截
      return undefined;
    }
  };

  return {
    authGuard
  };
}